/*
 * @Author       :
 * @Date         : 2022-01-27 21:13:55
 * @LastEditors  : Please set LastEditors
 * @LastEditTime : 2022-02-16 23:14:32
 * @Description  : 封装请求
 */
import axios from 'axios'
import store from '@/store'
import { ElMessage } from 'element-plus'
import { isCheckTimeout } from '@/utils/auth'

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})
// 请求拦截器

service.interceptors.request.use(config => {
  // 统一注入token
  if (store.getters.token) {
    if (isCheckTimeout()) {
      // 超时退出操作
      store.dispatch('user/logout')
      return Promise.reject(new Error('token 失效'))
    }
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
}, error => {
  return Promise.reject(new Error(error))
})

// 响应拦截器

service.interceptors.response.use(
  response => {
    const { success, message, data } = response.data
    // 判断当前请求是否成功
    if (success) {
      // 成功返回解析后的数据
      return data
    } else {
      // 失败消息提示
      ElMessage.error(message)
      return Promise.reject(new Error(message))
    }
  },
  // 请求失败
  error => {
    // token 超时过期
    if (error.response && error.response.data && error.response.data.code === 401) {
      store.dispatch('user/logout')
    }
    ElMessage.error(error.message)
    return Promise.reject(new Error(error))
  }
)

export default service
